#pragma once

#include <map>
#include <vector>

template<class T1, class T2>
struct dmap
{
	std::map<T1, T2>m_mapObj;

	typedef typename std::map<T1, T2> dmap_pair;
	typedef typename dmap_pair::value_type value_type;
	typedef typename dmap_pair::const_iterator const_iterator;
	typedef typename dmap_pair::iterator iterator;

public:
	~dmap()
	{
		clear();
	};

	void insert(T1 id, T2 da, bool ifRepaceExist = false)
	{
		if (ifRepaceExist)
		{
			iterator iter = m_mapObj.find(id);
			if (iter != m_mapObj.end())
			{
				m_mapObj[id] = da;
			}
			else
			{
				m_mapObj.insert(dmap_pair::value_type(id, da));
			}
		}
		else
		{
			m_mapObj.insert(dmap_pair::value_type(id, da));
		}
	};

	BOOL getAt(const T1 id, T2& da)
	{
		iterator iter = m_mapObj.find(id);
		if (iter != m_mapObj.end())
		{
			da = m_mapObj[id];
			return TRUE;
		}
		return FALSE;
	};

	void clear()
	{
		//for (auto&it : m_mapObj)
		//{
		//	delete it.second;
		//}
		m_mapObj.clear();
	};
};
